﻿#include "EnumEditEntry.h"
#include "EntryCombobox.h"
#include <QMetaEnum>

struct EnumEditEntry::EnumEditEntryPrivate {
    EntryCombobox *combobox{nullptr};
    QMetaEnum metaEnum;
};

EnumEditEntry::~EnumEditEntry() { }

EnumEditEntry::EnumEditEntry(QWidget *parent) : EditEntry{parent} {
    p.reset(new EnumEditEntryPrivate);
    initui();
}

void EnumEditEntry::setMetaEnum(const QMetaEnum &metaEnum) {
    p->metaEnum = metaEnum;
    p->combobox->clear();
    for(int i = 0; i < p->metaEnum.keyCount(); ++i) {
        p->combobox->addItem(tr(p->metaEnum.key(i)), p->metaEnum.value(i));
    }
}

void EnumEditEntry::setValue(int value) {
    if(p->combobox->hasFocus()) {
        return ;
    }
    for(int i = 0; i < p->combobox->count(); ++i) {
        const auto val = p->combobox->itemData(i).toInt();
        if(val == value) {
            p->combobox->setCurrentIndex(i);
        }
    }
}

int EnumEditEntry::value() {
    const auto val = p->combobox->currentData().toInt();
    return val;
}

void EnumEditEntry::initui() {
    p->combobox = new EntryCombobox;
    addEditControll(p->combobox);
    connect(p->combobox, qOverload<int>(&EntryCombobox::currentIndexChanged), [=] {
        emit valueChanged(value());
    });
}
